package org.chispa.api.visitors;

import org.chispa.api.query.ParamWrapper;
import org.chispa.api.util.BadSyntaxException;
import org.chispa.api.util.BinningNumber;
import org.chispa.api.util.NoSuitableVisitorException;

public interface QueryVisitor<R,I> {
	
	String visitDecryptNum(ParamWrapper<String,R,String> wrap) throws NoSuitableVisitorException;
	
	R visitFloat(ParamWrapper<BinningNumber,I,R> wrap) throws NoSuitableVisitorException;
	
	R visitInt(ParamWrapper<BinningNumber,I,R> wrap) throws NoSuitableVisitorException;
	
	R visitString(ParamWrapper<String,String,R> wrap) throws NoSuitableVisitorException;
	
	I visitFloatHash(ParamWrapper<BinningNumber,I,R> wrap) throws NoSuitableVisitorException, BadSyntaxException;
	
	I visitIntHash(ParamWrapper<BinningNumber,I,R> wrap) throws NoSuitableVisitorException, BadSyntaxException;
	
	R visitStringHash(ParamWrapper<String,R,String> wrap) throws NoSuitableVisitorException, BadSyntaxException;
	
	String visitFloatHashExpr(ParamWrapper<String,String,R> wrap) throws NoSuitableVisitorException, BadSyntaxException;
		
	String visitIntHashExpr(ParamWrapper<String,String,R> wrap) throws NoSuitableVisitorException, BadSyntaxException;

}
